package py.com.erpone.session.dm;



import java.util.ArrayList;
import java.util.List;

import javax.ejb.LocalBean;
import javax.ejb.Stateful;
import javax.enterprise.context.Conversation;
import javax.enterprise.context.ConversationScoped;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.inject.Inject;
import javax.inject.Named;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.PersistenceContextType;

import py.com.erpone.entity.dm.Departamento;
import py.com.erpone.entity.dm.Empleado;
import py.com.erpone.entity.dm.Empresa;
import py.com.erpone.session.dm.list.DepartamentoList;
import py.com.erpone.util.LocaleSelector;



@Stateful
@Named
@LocalBean
@ConversationScoped
public class EmpleadoBean {

	@PersistenceContext(type=PersistenceContextType.EXTENDED)
	private EntityManager em;
	
	@Inject
	private Conversation conversation;
	
	@Inject
	DepartamentoList dl;
	
	@Inject
	private LocaleSelector localeSelector;
	  
	List<Departamento> listDepartamento;
	
	public Empresa empresa;
	
	private Empleado empleado;	
	
	
	//PRUEBA MANUAL; OBTENER EMPRESA DEL USUARIO LOGUEADO Y ENVIARLE COMO PARAMETRO AL METODO FINDALLDEPARTMENTBYIDE();
	public List<Departamento> getListDepartamento() {
		Empresa emp = new Empresa ();
		emp.setId(Long.parseLong("10"));
		System.out.println(listDepartamento = dl.findAllDeparmentByEmpresa(emp));
		return listDepartamento;
	}

	public void setListDepartamento(List<Departamento> listDepartamento) {
		this.listDepartamento = listDepartamento;
	}

	

	public Empresa getEmpresa() {
		return empresa;
	}

	public void setEmpresa(Empresa empresa) {
		this.empresa = empresa;
	}

	public Empleado getEmpleado() {
		return empleado;
	}

	public void setEmpleado(Empleado empleado) {
		this.empleado = empleado;
	}

	
	public DepartamentoList getDl() {
		return dl;
	}

	public void setDl(DepartamentoList dl) {
		this.dl = dl;
	}

	public String iniciar(){
		if(conversation.isTransient())
			conversation.begin();
		empleado=new Empleado();
		empleado.setDepartamento(new Departamento());
		
		
		return "/dm/empleado.xhtml";
	}
	
	public String iniciar(Empleado empleado){
		if(conversation.isTransient())
			conversation.begin();
		this.empleado=empleado;
		listDepartamento = new ArrayList<>();
		return "/dm/empleado.xhtml";
	}
	
	
	public String guardar(){
		if(empleado.getId()==null){
			em.persist(empleado);
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, localeSelector.getMensaje("empleado_nuevo"), empleado.getNombre()));
		}else{
			em.merge(empleado);
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, localeSelector.getMensaje("empleado_modificado"), empleado.getNombre()));
		}
		if(!conversation.isTransient())
			conversation.end();
		return "/dm/empleados.xhtml";
	}
	
	public String eliminar(Empleado empleado){
		em.remove(em.merge(empleado));
        FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, localeSelector.getMensaje("empleado_eliminado"), empleado.getNombre()));
		if(!conversation.isTransient())
			conversation.end();
		return "/dm/empleados.xhtml";
	}
	
	public String cancelar(){
		if(!conversation.isTransient())
			conversation.end();
		return "/dm/empleados.xhtml";
	}
//	public List<Departamento> selectOneMenuListener(ValueChangeEvent e){
//		
//		//Al recibir el parametro se hace un casting a empesa debido que el valor que se recupera del evento retorna en un object y se
//		//Setea la empresa con el nuevo valor usando el setEmpresa del departamento
//		   //SE DEBERIA CARGAR LA CONSULTA CON PARAMETROS EN UNA VARIABLE AUXILIAR PARA QUE CADA VEZ QUE OCURRA EL CAMBIO EM EMPRESA SE ACTUALIZE LA LISTA, Y OBTENER EN DEPARTAMENTO ESA LISTA
//		   Empresa emp = ((Empresa)e.getNewValue());
//		   System.out.println(emp);
//		   listDepartamento = dl.findAllDeparmentByEmpresa(emp);
//		   System.out.println(listDepartamento);
//		return listDepartamento;
//		   
//		   //empleado.getDepartamento().setEmpresa((Empresa)e.getNewValue());
//		   //Se llama a la consulta findAllDepartmentByEmpresa y se le pasa el parametro de acuerdo a lo seleccionado
//		   //System.out.println(dl.findAllDeparmentByEmpresa(empleado.getDepartamento().getEmpresa()));
//		   
//	    }
	
	
	
}
